package shark.oss;

import io.minio.errors.*;
import shark.oss.exception.OssException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;

/**
 * 附件服务接口
 *
 * author: 唐浩宇
 */
public interface OssFileService {

    /**
     * 保存文件到指定的附件服务器上
     * @param server 服务器名称，对应已经定义的某个附件服务器
     * @param inStream 文件输入流，包含文件的内容
     * @param path 文件存放的路径， 使用"/"分隔
     * @param fileName 指定附件的名称
     * @throws OssException
     *
     * @return 文件在附件服务器上存储的唯一资源标识符(URI)
     */
    String persist(String server, InputStream inStream, String path, String fileName)
            throws OssException;

    /**
     * 修改附件服务器上的指定文件
     * @param fileUrl 被修改的文件的唯一资源标识符(URI)
     * @param inStream 文件输入流，新的文件内容
     * @throws OssException
     *
     */
    void update(String fileUrl, InputStream inStream) throws OssException;

    /**
     * 下载指定的文件
     * @param fileUrl
     * @param request
     * @param response
     * @throws OssException
     */
    void download(String fileUrl, HttpServletRequest request, HttpServletResponse response)
            throws OssException;

    /**
     * 从附件服务器上删除指定的文件
     * @param fileUrl 文件的唯一资源标识符
     * @throws OssException
     *
     */
    void delete(String fileUrl) throws OssException;

    /**
     * 判断附件服务器上某一指定文件是否存在
     * @param fileUrl 文件的唯一资源标识符
     * @return true表示该文件存在
     * @throws OssException
     *
     */
    boolean isExist(String fileUrl) throws OssException, ServerException, InsufficientDataException, ErrorResponseException, IOException, NoSuchAlgorithmException, InvalidKeyException, InvalidResponseException, XmlParserException, InternalException;

    /**
     * 获取指定文件流
     * @param fileUrl
     * @return InputStream
     * @throws OssException
     */
    InputStream getFile(String fileUrl) throws  OssException;
}
